# !/usr/bin/env python3  /*设定脚本文件直接能执行*/
# -*- coding:utf-8 -*-   /*设置编码*/
"""
@Author: zhuo
@Software: PyCharm
@File: tmyMainForm.py
@Time: 2024/1/11 13:46
@Function：ctQVerticalTabWidget：选项卡位于左侧的TabWidget控件，且文字方向为水平方向
"""
from PySide6.QtCore import QSize
from PySide6.QtWidgets import *


class ctQVerticalTabWidget(QTabWidget):
    """
    选项卡位于左侧的TabWidget控件，且文字方向为水平方向
    """

    # 初始化
    def __init__(self, *args, **kwargs):
        # 继承自父类
        QTabWidget.__init__(self, *args, **kwargs)
        # 使用自定义绘制的选项卡
        self.setTabBar(ctQTabBar())
        # 设置选项卡位置
        self.setTabPosition(QTabWidget.West)


class ctQTabBar(QTabBar):
    """
    自定义绘制选项卡，
    """

    # 重写获取索引处制表符大小函数
    def tabSizeHint(self, index):
        """
        function:  重写获取索引处制表符大小函数
              in:  index：选项卡索引
             out:  None
          return:  QSize(width,height)
          others:  Overrides  Get The Tab Size At The Index Func
        """
        hint = super().tabSizeHint(index).transposed()
        # 设置选项卡最大尺寸
        return QSize(
            max(hint.width(), 70),
            max(hint.height(), 50)
        )

    # 重写绘制事件
    def paintEvent(self, event):
        """
        function:  重写绘制事件
              in:  event：paintEvent
             out:  None
          return:  None
          others:  Overwrite Paint Event
        """
        # 初始化绘制对象、选项卡栏参数绘制对象
        painter = QStylePainter(self)
        opt = QStyleOptionTab()
        # 获取选中的选项卡
        current = self.currentIndex()
        # 遍历所有的选项卡
        for i in range(self.count()):
            if i == current:
                continue
            # 使用tabIndex选项卡中的值初始化选项
            self.initStyleOption(opt, i)
            # 绘制部件样式
            painter.drawControl(QStyle.CE_TabBarTabShape, opt)
            # 设置样式，从左到右绘制
            opt.shape = QTabBar.RoundedNorth
            # 重新绘制绘制部件样式
            painter.drawControl(QStyle.CE_TabBarTabLabel, opt)

        self.initStyleOption(opt, current)
        painter.drawControl(QStyle.CE_TabBarTabShape, opt)
        opt.shape = QTabBar.RoundedNorth
        painter.drawControl(QStyle.CE_TabBarTabLabel, opt)
